package com.smartcommunity.elasticsearch.base;

import java.util.List;
import java.util.Map;

import org.elasticsearch.index.query.QueryBuilder;
import org.elasticsearch.search.sort.SortBuilder;

import com.smartcommunity.exception.BusinessException;

/**
 * 社区es数据操作接口
 * @author 渔七
 * @since 2023年3月9日
 */
public interface EsDataService {

    /**
     * 获取index名称
     * @param suffix 后缀
     * @return indexName
     */
    String getIndexName(String suffix);

    /**
     * 获取index前缀
     * @return index前缀
     */
    String getIndexPrefix();

    /**
     * 获取本地json文件的settingJson内容
     */
    String getLocalSetting();

    /**
     * 获取本地json文件的mappingJson内容
     */
    String getLocalMapping();

    /**
     * 创建索引
     *
     * @param index 索引名称
     */
    boolean createIndex(String index) throws BusinessException;

    /**
     * 查入数据
     *
     * @param index    索引名称
     * @param id       id
     * @param jsonData json数据
     * @return
     */
    boolean insert(String index, String id, String jsonData) throws BusinessException;

    /**
     * 批量插入数据
     *
     * @param index    索引名称
     * @param valueMap <id,json>数据
     */
    boolean batchInsert(String index,Map<String, String> valueMap) throws BusinessException;

    /**
     * 批量插入数据,当id已存在会覆盖数据
     *
     * @param index    索引名称
     * @param valueMap <id,json>数据
     */
    boolean batchReplace(String index,Map<String, String> valueMap) throws BusinessException;

    /**
     * 更新数据
     *
     * @param index    索引名称
     * @param id       数据id
     * @param valueMap 更新的数据
     */
    boolean update(String index, String id, Map<String, Object> valueMap) throws BusinessException;
    
    /**
     * 删除数据
     *
     * @param index    索引名称
     * @param id       数据id
     */
    boolean delete(String index, String id) throws BusinessException;
    
    /**
     * 根据id查询数据
     * @param indexName   索引名称
     * @param id   数据id
     * @return
     * @throws BusinessException
     */
    public List<Map<String, Object>> getDataById(String[] indexName, String id) throws BusinessException;
    
    /**
     * 根据id查询数据
     * @param indexName   索引名称
     * @param ids   数据id几集合
     * @return
     * @throws BusinessException
     */
    public List<Map<String, Object>> getDataByIds(String[] indexName, List<String> ids) throws BusinessException;
    
    /**
     * 分页查询数据
     * @param indexNameArray
     * @param queryBuilder
     * @param fields
     * @param pageNum
     * @param pageSize
     * @param sortBuilder
     * @return
     * @throws BusinessException
     */
    public Map<String, Object> page(String[] indexNameArray, QueryBuilder queryBuilder, String fields, int pageNum, int pageSize, SortBuilder sortBuilder) throws BusinessException;
    
    /**
     * 批量插入数据并刷新,当id已存在会覆盖数据
     *
     * @param index    索引名称
     * @param valueMap <id,json>数据
     */
    public boolean batchReplaceAndRefresh(String index,Map<String, String> valueMap) throws BusinessException;
    
    /**
     * 删除数据并刷新
     *
     * @param index    索引名称
     * @param id       数据id
     */
    public boolean deleteAndRefresh(String index, String id) throws BusinessException;
    
    /**
     * 根据条件更新
     */
    public boolean updateQuery(String index, QueryBuilder queryBuilder, Map<String, Object> params) throws BusinessException;
    
    /**
     * 根据条件删除
     */
    public boolean deleteQuery(String index, QueryBuilder queryBuilder) throws BusinessException;
    
    /**
     * 根据条件查询
     */
    public List<Map<String, Object>> findAll(String indexName, QueryBuilder builder) throws BusinessException;
    
    /**
     * 批量更新
     */
    public boolean batchUpdate(String indexName, Map<String, Map<String, Object>> map) throws BusinessException;
}
